﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using vudu.EnlaceDatos.SqlServer;

namespace vudu.Logica.Clases
{
    public class Rol
    {
        #region Private Member Variables

        private string _correo;
        private string _password;
        private int _id;
        private int _fkEst;
        private int _fkProf;
        private int _fkEsc;
        private int _fkUniv;
        private Escuela _miEscuela;
        private Estudiante _miEstudiante;
        private Universidad _miUniversidad;
        private Profesor _miProfesor;
        private SqlServerRol _miDB;

        #endregion

        #region Constantes

        private const string _dominioEst = "@est.vudu.com";
        private const string _dominioProf = "@prof.vudu.com";
        private const string _dominioEsc = "@esc.vudu.com";
        private const string _dominioUniv = "@univ.vudu.com";

        #endregion

        #region Constructors

        public Rol()
        {
            Correo = Password = " ";
            Id= 0;
            MiDB = new SqlServerRol();
            FkEsc = FkEst = FkProf = FkUniv = 0;
        }

        #endregion

        #region Public Properties

        public string Correo
        {
            get { return _correo; }
            set { _correo = value; }
        }

        public string Password
        {
            get { return _password; }
            set { _password = value; }
        }

        public int Id
        {
            get { return _id; }
            set { _id = value; }
        }

        public int FkEst
        {
            get { return _fkEst; }
            set { _fkEst = value; }
        }

        public int FkProf
        {
            get { return _fkProf; }
            set { _fkProf = value; }
        }

        public int FkEsc
        {
            get { return _fkEsc; }
            set { _fkEsc = value; }
        }

        public int FkUniv
        {
            get { return _fkUniv; }
            set { _fkUniv = value; }
        }

        public Escuela MiEscuela
        {
            get { return _miEscuela; }
            set { _miEscuela = value; }
        }

        public Estudiante MiEstudiante
        {
            get { return _miEstudiante; }
            set { _miEstudiante = value; }
        }

        public Universidad MiUniversidad
        {
            get { return _miUniversidad; }
            set { _miUniversidad = value; }
        }
        
        public Profesor MiProfesor
        {
            get { return _miProfesor; }
            set { _miProfesor = value; }
        }

        public SqlServerRol MiDB
        {
            get { return _miDB; }
            set { _miDB = value; }
        }

        #endregion

        #region Public Methods

        /// <summary>
        /// Metodo para verificar que el estudiante existe
        /// </summary>
        /// <param name="ci"> cedula del estudiante</param>
        /// <returns> Obejto estudiante</returns>
        public Estudiante VerificarCedulaEstudiante(int ci)
        {
            SqlServerEstudiante est = new SqlServerEstudiante();
            _miEstudiante = est.ConsultarUnEstudiante(ci);
            return _miEstudiante;
        }

        /// <summary>
        /// Metodo para verificar que el profesor existe
        /// </summary>
        /// <param name="ci"> cedula del profesor</param>
        /// <returns> bool</returns>
        public bool VerificarCedulaProfesor(int ci)
        {
            return (_miDB.ConsultarUnProfesor(ci));
        }

        /// <summary>
        /// Metodo para verificar que el usuario no tenga rol
        /// </summary>
        /// <param name="ci">cedula del usuario</param>
        /// <param name="usuario">tipo de usuario</param>
        /// <returns>bool</returns>
        public bool VerificarRol(int ci, int usuario)
        {
            if (usuario == 1)   //Estudiante 
                return (_miDB.ConsultarEstudianteRol(ci));
            else if (usuario == 2)  //Profesor
                return (_miDB.ConsultarProfesorRol(ci));
            else if (usuario == 3)  //Escuela
                return (_miDB.ConsultarEstudianteRol(ci));
            else  // Universidad
                return (_miDB.ConsultarEstudianteRol(ci));
        }

        /// <summary>
        /// Metodo para verificar que el Correo no esta utilizado
        /// </summary>
        /// <param name="correo"> recibe el correo a verificar</param>
        /// <returns>bool</returns>
        public bool VerificarCorreo(string correo)
        {
            return (_miDB.ValidarCorreo(correo));
        }

        /// <summary>
        /// Busca en la base de datos el rol que contenga dicho nick y pass,
        /// </summary>
        /// <param name="nick">
        /// el correo del usuario que se esta loegando
        /// </param>
        /// <param name="pass">
        /// la contraseña del usuario que se esta logeando
        /// </param>
        /// <returns>si no lo consigue, retorna null</returns>
        public Rol UsuarioActual(string nick, string pass)
        {
            Rol rolActual = MiDB.ConsultarRol(nick, pass);
            if (rolActual != null)
            {
                this.CargarUsuarioDeRol(rolActual);
            }
            return rolActual;
        }

        /// <summary>
        /// Carga el usuario al cual corresponde el rol actual
        /// </summary>
        /// <param name="rolActual">
        /// el objeto rol el cual simboliza al usuario que esta siendo autenticado
        /// </param>
        public void CargarUsuarioDeRol(Rol rolActual)
        {
            if (rolActual.Correo.EndsWith(_dominioEst))
            {
                rolActual.MiEstudiante = MiDB.ConsultarUsuarioEstudiante(rolActual);
            }
            if (rolActual.Correo.EndsWith(_dominioProf))
            {
                rolActual.MiProfesor = MiDB.ConsultarUsuarioProfesor(rolActual);
            }
            if (rolActual.Correo.EndsWith(_dominioEsc))
            {
                rolActual.MiEscuela = MiDB.ConsultarUsuarioEscuela(rolActual);
            }
            if (rolActual.Correo.EndsWith(_dominioUniv))
            {
                rolActual.MiUniversidad = MiDB.ConsultarUsuarioUniversidad(rolActual);
            }
        }

        /// <summary>
        /// Metodo que registra los roles
        /// </summary>
        /// <param name="rolActual"> Recibe el rol a insertar </param>
        /// <param name="usuario"> El tipo de usuario</param>
        /// <returns>true si se inserto, false sino</returns>
        public bool RegistrarRol(Rol rolActual, int usuario)
        {
            if (usuario == 1)
                return (_miDB.InsertarRolEstudiante(rolActual));    ///Registrar Estudiante
            else if (usuario == 2)
                return (_miDB.InsertarRolProfesor(rolActual));      ///Registrar Profesor
            else if (usuario == 3)
                return (_miDB.InsertarRolEscuela(rolActual));       ///Registrar Escuela
            else
                return (_miDB.InsertarRolUniversidad(rolActual));   ///Registrar Universidad
        }

        /// <summary>
        /// Consulta todas la escuelas que estan en la bd sin rol
        /// </summary>
        /// <returns>Retorna una lista de escuelas</returns>
        public List<Escuela> ConsultarEscuelas()
        {
            List<Escuela> esc = new List<Escuela>();
            esc = _miDB.ConsultarEscuelasBD();
            return esc;
        }
        #endregion

    }
}